package justweb

// 树结构路由  map[string] Tree

// 节点数据结构
// type Node struct {
// 	Name       string
// 	ChildNodes []*Node
// }
// 这个还是放到外面比较好，会比较清晰

// 树的结构
// type BaseOnTree struct {
// 	tree map[string]*node
// 	// tree2 *node
// }

// var httpMethod = [4]string{
// 	http.MethodGet,
// 	http.MethodPost,
// 	http.MethodPut,
// 	http.MethodDelete,
// }

// func (t *BaseOnTree) ServeHTTP(c *Context) {
// 	// 查找路由树，处理请求
// 	if _, ok := t.tree[c.R.Method]; !ok {
// 		c.W.WriteHeader(http.StatusFound)
// 		c.W.Write([]byte("not found"))
// 		return
// 	}
// 	node := t.tree[c.R.Method]

// 	paths := strings.Split(strings.Trim(c.R.URL.Path, "/"), "/")

// 	// for _, p := range paths[1:] {
// 	for i := 0; i < len(paths); i++ {
// 		child, ok := node.findChildNode(paths[i])
// 		if ok { // 孩子中存在当前值
// 			node = child
// 		} else {
// 			c.W.WriteHeader(http.StatusFound)
// 			c.W.Write([]byte("not found"))
// 			return
// 		}
// 	}

// 	// if node.path != paths[0] {
// 	// 	c.W.WriteHeader(http.StatusFound)
// 	// 	c.W.Write([]byte("not found"))
// 	// 	return
// 	// } else {
// 	// 	// for _, p := range paths[1:] {
// 	// 	for i := 1; i < len(paths); i++ {
// 	// 		child, ok := node.findChildNode(paths[i])
// 	// 		if ok { // 孩子中存在当前值
// 	// 			node = child
// 	// 		} else {
// 	// 			c.W.WriteHeader(http.StatusFound)
// 	// 			c.W.Write([]byte("not found"))
// 	// 			return
// 	// 		}
// 	// 	}
// 	// }

// 	// 匹配路径上面是不是存在处理函数，没有就表示没有注册
// 	if node.handler != nil {
// 		node.handler(c)
// 	} else {
// 		c.W.WriteHeader(http.StatusFound)
// 		c.W.Write([]byte("not found"))
// 		return
// 	}

// }

// // 路由注册，就是将值插入到树里
// func (t *BaseOnTree) Route(method string, pattern string, handleFun func(c *Context)) {
// 	// 校验
// 	if _, ok := t.tree[method]; !ok {
// 		// t.tree = make(map[string]*node)
// 		t.tree[method] = newNode()
// 	}
// 	node := t.tree[method]

// 	pattern = strings.Trim(pattern, "/")
// 	paths := strings.Split(pattern, "/")

// 	// 开始判断与插入，遍历传入的路径
// 	for i, p := range paths {
// 		if n, ok := node.findChildNode(p); !ok { // 路径不存在则添加树节点
// 			node.newChildren(paths[i:], handleFun)
// 		} else if n.handler != nil { // 路径存在，并且处理函数也存在（重复注册时）
// 			n.handler = handleFun
// 		}
// 	}

// }

// // 建立树的时候，直接创建map[get]\map[post]\map[put]... ?
// // 这里选择单例饱汉模式，需要再创建
// func NewTreeRouter() Handler {
// 	return &BaseOnTree{
// 		tree: make(map[string]*node),
// 	}
// }

// // func ValidationURL(method string, pattern string) bool {
// // 	// 针对method。没有则创建，仅创建一次

// // }

// // 表示实现成功
// var _ Handler = &BaseOnTree{}
